<HTML>
<HEAD>
<TITLE>
NodoArbolB.cpp
</TITLE>
</HEAD>
<BODY>
<PRE>
<font color="blue">#include</font> <font color="maroon">"NodoArbolB.h"</font>

<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>FucionarNodos<font color="black">(</font><font color="blue">int</font> nodo1, <font color="blue">int</font> nodo2, <font color="blue">int</font> nodo3<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">int</font> aux;

    <font color="blue">if</font><font color="black">(</font>nodo1<font color="black">&#62;</font>nodo2<font color="black">)</font>
    <font color="black">{</font>
        aux<font color="black">=</font>nodo1;
        nodo1<font color="black">=</font>nodo2;
        nodo2<font color="black">=</font>aux;
    <font color="black">}</font>

    <font color="blue">if</font><font color="black">(</font>nodo1<font color="black">&#62;</font>nodo3<font color="black">)</font>
    <font color="black">{</font>
        aux<font color="black">=</font>nodo1;
        nodo1<font color="black">=</font>nodo3;
        nodo3<font color="black">=</font>aux;
    <font color="black">}</font>

    <font color="blue">if</font><font color="black">(</font>nodo2<font color="black">&#62;</font>nodo3<font color="black">)</font>
    <font color="black">{</font>
        aux<font color="black">=</font>nodo2;
        nodo2<font color="black">=</font>nodo3;
        nodo3<font color="black">=</font>aux;
    <font color="black">}</font>


    <font color="blue">if</font><font color="black">(</font>nodo1<font color="black">=</font><font color="black">=</font><font color="maroon">-1</font><font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo2<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.size<font color="black">(</font><font color="black">)</font><font color="black">+</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo3<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.size<font color="black">(</font><font color="black">)</font><font color="black">+</font><font color="maroon">1</font><font color="black">&#60;</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font>cantidadClaves<font color="black">)</font>
        <font color="black">{</font>
            MoverContenidoNodo<font color="black">(</font>nodo3,nodo2,<font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo3<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.size<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
        <font color="black">}</font>
    <font color="black">}</font>
    <font color="blue">else</font>
    <font color="black">{</font>
        <font color="green">//estan los 3 nodos</font>
        <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo1<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.size<font color="black">(</font><font color="black">)</font><font color="black">+</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo2<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.size<font color="black">(</font><font color="black">)</font><font color="black">+</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo3<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.size<font color="black">(</font><font color="black">)</font><font color="black">+</font><font color="maroon">2</font> <font color="black">&#60;</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font> <font color="maroon">2</font><font color="black">*</font>cantidadClaves<font color="black">)</font>
        <font color="black">{</font>
            MoverContenidoNodo<font color="black">(</font>nodo2,nodo3,<font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo3<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.size<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
            MoverContenidoNodo<font color="black">(</font>nodo1,nodo2,<font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo2<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.size<font color="black">(</font><font color="black">)</font><font color="black">-</font>cantidadClaves<font color="maroon">-1</font><font color="black">)</font>;
        <font color="black">}</font>
    <font color="black">}</font>

<font color="black">}</font>


<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>MoverContenidoNodo<font color="black">(</font><font color="blue">int</font> desde, <font color="blue">int</font> hasta,<font color="blue">int</font> cantidad<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>desde<font color="black">=</font><font color="black">=</font>hasta<font color="black">)</font>
        <font color="blue">return</font>;

    <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.size<font color="black">(</font><font color="black">)</font><font color="black">&#60;</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font>cantidad<font color="black">)</font>
        cantidad<font color="black">=</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.size<font color="black">(</font><font color="black">)</font>;

    <font color="blue">if</font> <font color="black">(</font>cantidad<font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
        <font color="blue">return</font>;

    <font color="blue">if</font><font color="black">(</font>hasta<font color="black">&#60;</font>desde<font color="black">)</font>
    <font color="black">{</font>
        cantidad<font color="black">-</font><font color="black">-</font>;
        <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.push_back<font color="black">(</font>claves<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font>;
        <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.push_back<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">)</font>;
        <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.erase<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.begin<font color="black">(</font><font color="black">)</font><font color="black">)</font>;


        <font color="blue">for</font><font color="black">(</font>;cantidad<font color="black">!</font><font color="black">=</font><font color="maroon">0</font> <font color="black">&</font><font color="black">&</font> claves.size<font color="black">(</font><font color="black">)</font><font color="black">!</font><font color="black">=</font><font color="maroon">0</font>;cantidad<font color="black">-</font><font color="black">-</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.push_back<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.erase<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.begin<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.push_back<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.erase<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.begin<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
        <font color="black">}</font>


        <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.size<font color="black">(</font><font color="black">)</font><font color="black">&#62;</font><font color="black">=</font><font color="maroon">1</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="green">//si queda alguno</font>
            claves<font color="black">[</font>hasta<font color="black">]</font><font color="black">=</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves<font color="black">[</font><font color="maroon">0</font><font color="black">]</font>;
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.erase<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.begin<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
        <font color="black">}</font>
        <font color="blue">else</font>
        <font color="black">{</font>
            <font color="green">//si quedo vacio</font>
            vector<font color="black">&#60;</font>ComponenteArbolB<font color="black">*</font><font color="black">&#62;</font><font color="black">:</font><font color="black">:</font>iterator itN;
            vector<font color="black">&#60;</font>Clave<font color="black">*</font><font color="black">&#62;</font><font color="black">:</font><font color="black">:</font>iterator itC;
            <font color="blue">for</font><font color="black">(</font><font color="blue">int</font> i<font color="black">=</font><font color="maroon">0</font>; i<font color="black">!</font><font color="black">=</font>desde; i<font color="black">+</font><font color="black">+</font>, <font color="black">+</font><font color="black">+</font>itN, <font color="black">+</font><font color="black">+</font>itC<font color="black">)</font>;

            claves.erase<font color="black">(</font>itC<font color="black">)</font>;
            nodos.erase<font color="black">(</font>itN<font color="black">)</font>;
        <font color="black">}</font>

    <font color="black">}</font>
    <font color="blue">else</font>
    <font color="black">{</font>
        <font color="green">//desde&#60;hasta</font>
        cantidad<font color="black">-</font><font color="black">-</font>;
        <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.insert<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.begin<font color="black">(</font><font color="black">)</font>,claves<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font>;
        <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.insert<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.begin<font color="black">(</font><font color="black">)</font>,<font color="black">*</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.end<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">)</font><font color="black">)</font>;
        <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.erase<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.end<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">)</font>;


        <font color="blue">for</font><font color="black">(</font>;cantidad<font color="black">=</font><font color="black">=</font><font color="maroon">0</font>;cantidad<font color="black">-</font><font color="black">-</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.insert<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.begin<font color="black">(</font><font color="black">)</font>,<font color="black">*</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.end<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">)</font><font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.erase<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.end<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.insert<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.begin<font color="black">(</font><font color="black">)</font>,<font color="black">*</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.end<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">)</font><font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.erase<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.end<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">)</font>;
        <font color="black">}</font>

        <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.size<font color="black">(</font><font color="black">)</font><font color="black">&#62;</font><font color="maroon">1</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="green">//si queda alguno</font>
            claves<font color="black">[</font>desde<font color="black">]</font><font color="black">=</font><font color="black">*</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.end<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.erase<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.end<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">)</font>;
        <font color="black">}</font>
        <font color="blue">else</font>
        <font color="black">{</font>
            <font color="green">//si quedo vacio</font>
            claves.erase<font color="black">(</font>claves.begin<font color="black">(</font><font color="black">)</font><font color="black">+</font>desde<font color="black">)</font>;
            nodos.erase<font color="black">(</font>nodos.begin<font color="black">(</font><font color="black">)</font><font color="black">+</font>desde<font color="black">)</font>;
        <font color="black">}</font>

    <font color="black">}</font>
<font color="black">}</font>


<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>BajarMayor<font color="black">(</font>Clave <font color="black">*</font>dato, ComponenteArbolB <font color="black">*</font>puntero<font color="black">)</font>
<font color="black">{</font>
    nodos.push_back<font color="black">(</font>puntero<font color="black">)</font>;
    claves.push_back<font color="black">(</font>dato<font color="black">)</font>;
<font color="black">}</font>



<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>BajarMenor<font color="black">(</font>Clave <font color="black">*</font>dato, ComponenteArbolB <font color="black">*</font>puntero<font color="black">)</font>
<font color="black">{</font>
    nodos.insert<font color="black">(</font>nodos.begin<font color="black">(</font><font color="black">)</font>,puntero<font color="black">)</font>;
    claves.insert<font color="black">(</font>claves.begin<font color="black">(</font><font color="black">)</font>,dato<font color="black">)</font>;
<font color="black">}</font>



<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>SubirMayor<font color="black">(</font>Clave <font color="black">*</font> <font color="black">&</font>dato, ComponenteArbolB <font color="black">*</font> <font color="black">&</font>puntero<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>claves.size<font color="black">(</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
    <font color="black">{</font>
        dato<font color="black">=</font>NULL;
        puntero<font color="black">=</font>NULL;
        <font color="blue">return</font>;
    <font color="black">}</font>
    dato<font color="black">=</font>claves<font color="black">[</font>claves.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">]</font>;
    puntero<font color="black">=</font>nodos<font color="black">[</font>nodos.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">]</font>;
    claves.pop_back<font color="black">(</font><font color="black">)</font>;
    nodos.pop_back<font color="black">(</font><font color="black">)</font>;
<font color="black">}</font>



NodoArbolB<font color="black">:</font><font color="black">:</font>~NodoArbolB<font color="black">(</font><font color="black">)</font>
<font color="black">{</font>
    <font color="blue">for</font><font color="black">(</font>vector<font color="black">&#60;</font>ComponenteArbolB<font color="black">*</font><font color="black">&#62;</font><font color="black">:</font><font color="black">:</font>iterator it<font color="black">=</font>nodos.begin<font color="black">(</font><font color="black">)</font>; it <font color="black">!</font><font color="black">=</font> nodos.end<font color="black">(</font><font color="black">)</font>; <font color="black">+</font><font color="black">+</font>it<font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">delete</font> <font color="black">*</font>it;
    <font color="black">}</font>


    <font color="blue">for</font><font color="black">(</font>vector<font color="black">&#60;</font>Clave<font color="black">*</font><font color="black">&#62;</font><font color="black">:</font><font color="black">:</font>iterator it<font color="black">=</font>claves.begin<font color="black">(</font><font color="black">)</font>; it <font color="black">!</font><font color="black">=</font> claves.end<font color="black">(</font><font color="black">)</font>; <font color="black">+</font><font color="black">+</font>it<font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">delete</font> <font color="black">*</font>it;
    <font color="black">}</font>
<font color="black">}</font>



<font color="blue">bool</font> NodoArbolB<font color="black">:</font><font color="black">:</font>Ingresar<font color="black">(</font>Informacion <font color="black">*</font>dato<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">bool</font> <font color="blue">error</font><font color="black">=</font><font color="blue">false</font>;
    <font color="blue">int</font> i;
    <font color="blue">for</font><font color="black">(</font> i<font color="black">=</font><font color="maroon">0</font>; <font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font>i <font color="black">&#60;</font> claves.size<font color="black">(</font><font color="black">)</font>;  i<font color="black">+</font><font color="black">+</font><font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>Comparar<font color="black">(</font>claves<font color="black">[</font>i<font color="black">]</font><font color="black">)</font><font color="black">&#60;</font><font color="maroon">0</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="green">//salgo cuando encuentro la primer clave menos</font>
            <font color="blue">break</font>;
        <font color="black">}</font>
    <font color="black">}</font>

    <font color="green">//lo agrego al siguiente</font>
    <font color="blue">if</font><font color="black">(</font>nodos.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">&#60;</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font> i<font color="black">)</font>
        nodos.push_back<font color="black">(</font><font color="blue">new</font> HojaArbolB<font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>cantidadClaves<font color="black">)</font><font color="black">)</font>;
    <font color="blue">error</font><font color="black">=</font>nodos<font color="black">[</font>i<font color="black">]</font><font color="black">-</font><font color="black">&#62;</font>Ingresar<font color="black">(</font>dato<font color="black">)</font>;

    ActualizarClave<font color="black">(</font>i<font color="black">)</font>;

    <font color="blue">if</font><font color="black">(</font><font color="blue">error</font><font color="black">)</font>
        SolucionarDesborde<font color="black">(</font> i<font color="black">)</font>;

    <font color="blue">error</font><font color="black">=</font> claves.size<font color="black">(</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font>cantidadClaves<font color="black">+</font><font color="maroon">1</font>;



    <font color="blue">return</font> <font color="blue">error</font>;

<font color="black">}</font>

<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>SolucionarDesborde<font color="black">(</font><font color="blue">int</font> i<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">int</font> j;

    <font color="blue">bool</font> solucionado<font color="black">=</font><font color="blue">false</font>;

    <font color="blue">if</font><font color="black">(</font> <font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font><font color="black">(</font>i<font color="black">+</font><font color="maroon">1</font> <font color="black">)</font> <font color="black">&#60;</font> claves.size<font color="black">(</font><font color="black">)</font><font color="black">)</font>
        j<font color="black">=</font>i<font color="black">+</font><font color="maroon">1</font>;
    <font color="blue">else</font>
        j<font color="black">=</font>i<font color="maroon">-1</font>;

    <font color="blue">if</font><font color="black">(</font>j<font color="black">!</font><font color="black">=</font><font color="maroon">-1</font><font color="black">)</font>
    <font color="black">{</font>
        MoverContenido<font color="black">(</font>i,j<font color="black">)</font>;

        <font color="blue">if</font><font color="black">(</font>nodos<font color="black">[</font>j<font color="black">]</font><font color="black">-</font><font color="black">&#62;</font>EsHoja<font color="black">(</font><font color="black">)</font><font color="black">)</font>
            solucionado<font color="black">=</font> <font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>j<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.size<font color="black">(</font><font color="black">)</font> <font color="black">&#60;</font><font color="black">=</font> <font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font>cantidadClaves;
        <font color="blue">else</font>
            solucionado<font color="black">=</font> <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>j<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.size<font color="black">(</font><font color="black">)</font> <font color="black">&#60;</font><font color="black">=</font> <font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font>cantidadClaves;
    <font color="black">}</font>

    <font color="blue">if</font><font color="black">(</font>solucionado<font color="black">)</font>
        <font color="blue">return</font>;

    <font color="blue">if</font><font color="black">(</font>nodos<font color="black">[</font>i<font color="black">]</font><font color="black">-</font><font color="black">&#62;</font>EsHoja<font color="black">(</font><font color="black">)</font><font color="black">)</font>
    <font color="black">{</font>
        DividirHojas<font color="black">(</font>i,j<font color="black">)</font>;
    <font color="black">}</font>
    <font color="blue">else</font>
    <font color="black">{</font>
        DividirNodos<font color="black">(</font>i,j<font color="black">)</font>;
    <font color="black">}</font>
<font color="black">}</font>


<font color="blue">bool</font> NodoArbolB<font color="black">:</font><font color="black">:</font>EsHoja<font color="black">(</font><font color="black">)</font>
<font color="black">{</font>
    <font color="blue">return</font> <font color="blue">false</font>;
<font color="black">}</font>



<font color="blue">bool</font> NodoArbolB<font color="black">:</font><font color="black">:</font>Quitar<font color="black">(</font>Informacion <font color="black">*</font>dato<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">bool</font> <font color="blue">error</font><font color="black">=</font><font color="blue">false</font>;
    <font color="blue">int</font> i;
    <font color="blue">for</font><font color="black">(</font> i<font color="black">=</font><font color="maroon">0</font>; <font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font>i <font color="black">&#60;</font> claves.size<font color="black">(</font><font color="black">)</font>;  i<font color="black">+</font><font color="black">+</font><font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>Comparar<font color="black">(</font>claves<font color="black">[</font>i<font color="black">]</font><font color="black">)</font><font color="black">&#60;</font><font color="maroon">0</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="green">//salgo cuando encuentro la primer clave menor</font>
            <font color="blue">break</font>;
        <font color="black">}</font>
    <font color="black">}</font>

    <font color="green">//lo quito del siguiente</font>
    <font color="blue">error</font><font color="black">=</font>nodos<font color="black">[</font>i<font color="black">]</font><font color="black">-</font><font color="black">&#62;</font>Quitar<font color="black">(</font>dato<font color="black">)</font>;

    ActualizarClave<font color="black">(</font>i<font color="black">)</font>;

    <font color="blue">if</font><font color="black">(</font><font color="blue">error</font><font color="black">)</font>
        SolucionarSubFlojo<font color="black">(</font> i<font color="black">)</font>;

    <font color="blue">error</font><font color="black">=</font> claves.size<font color="black">(</font><font color="black">)</font><font color="black">&#60;</font> <font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font><font color="black">(</font>cantidadClaves <font color="black">*</font> <font color="maroon">2</font><font color="black">/</font><font color="maroon">3</font><font color="black">)</font>;

    <font color="blue">return</font> <font color="blue">error</font>;
<font color="black">}</font>


<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>SolucionarSubFlojo<font color="black">(</font><font color="blue">int</font>  i<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">int</font> j, k;

    <font color="blue">bool</font> solucionado<font color="black">=</font><font color="blue">false</font>;

    <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font>i<font color="black">+</font><font color="maroon">1</font> <font color="black">&#60;</font> claves.size<font color="black">(</font><font color="black">)</font><font color="black">)</font>
    <font color="black">{</font>
        j<font color="black">=</font>i<font color="black">+</font><font color="maroon">1</font>;
        <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font>j<font color="black">+</font><font color="maroon">1</font> <font color="black">&#60;</font> claves.size<font color="black">(</font><font color="black">)</font><font color="black">)</font>
            k<font color="black">=</font>j<font color="black">+</font><font color="maroon">1</font>;
        <font color="blue">else</font>
            k<font color="black">=</font>i<font color="maroon">-1</font>;
    <font color="black">}</font>
    <font color="blue">else</font>
    <font color="black">{</font>
        j<font color="black">=</font>i<font color="maroon">-1</font>;
        k<font color="black">=</font>j<font color="maroon">-1</font>;
    <font color="black">}</font>


    <font color="blue">if</font><font color="black">(</font>nodos<font color="black">[</font>i<font color="black">]</font><font color="black">-</font><font color="black">&#62;</font>EsHoja<font color="black">(</font><font color="black">)</font><font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font>j<font color="black">!</font><font color="black">=</font><font color="maroon">-1</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="blue">if</font><font color="black">(</font>k<font color="black">!</font><font color="black">=</font><font color="maroon">-1</font><font color="black">)</font>
            <font color="black">{</font>

                <font color="green">//si tiene los dos nodos a los costados trato de compensarlo con ellos</font>

                <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>j<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font> <font color="black">&#62;</font><font color="black">=</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font> <font color="maroon">2</font><font color="black">/</font><font color="maroon">3</font> <font color="black">*</font>cantidadClaves<font color="black">)</font>
                <font color="black">{</font>
                    <font color="green">//hay una forma de compensarlo con los nodos de los constados</font>
                    MoverContenido<font color="black">(</font>j, i<font color="black">)</font>;
                    solucionado<font color="black">=</font><font color="blue">true</font>;
                <font color="black">}</font>
                <font color="blue">else</font> <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>k<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font> <font color="black">&#62;</font><font color="black">=</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font> <font color="maroon">2</font><font color="black">/</font><font color="maroon">3</font> <font color="black">*</font>cantidadClaves<font color="black">)</font>
                <font color="black">{</font>
                    <font color="green">//hay una forma de compensarlo con los nodos de los constados</font>
                    <font color="blue">if</font><font color="black">(</font>j<font color="black">&#62;</font>i <font color="black">&</font><font color="black">&</font> k<font color="black">&#60;</font>i<font color="black">)</font>
                        MoverContenido<font color="black">(</font>k, i<font color="black">)</font>;
                    <font color="blue">else</font>
                    <font color="black">{</font>
                        MoverContenido<font color="black">(</font>k, j<font color="black">)</font>;
                        MoverContenido<font color="black">(</font>j, i<font color="black">)</font>;
                    <font color="black">}</font>

                    solucionado<font color="black">=</font><font color="blue">true</font>;
                <font color="black">}</font>
            <font color="black">}</font>
            <font color="blue">else</font>
            <font color="black">{</font>
                <font color="green">//si tiene un solo nodo al costado lo trato de compensar con el</font>

                <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>j<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font> <font color="black">&#62;</font><font color="black">=</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font> <font color="maroon">2</font><font color="black">/</font><font color="maroon">3</font> <font color="black">*</font>cantidadClaves<font color="black">)</font>
                <font color="black">{</font>
                    <font color="green">//hay una forma de compensarlo con el nodo del costado</font>

                    MoverContenido<font color="black">(</font>j, i<font color="black">)</font>;
                    solucionado<font color="black">=</font><font color="blue">true</font>;
                <font color="black">}</font>
            <font color="black">}</font>
        <font color="black">}</font>
    <font color="black">}</font>
    <font color="blue">else</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font>j<font color="black">!</font><font color="black">=</font><font color="maroon">-1</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="blue">if</font><font color="black">(</font>k<font color="black">!</font><font color="black">=</font><font color="maroon">-1</font><font color="black">)</font>
            <font color="black">{</font>

                <font color="green">//si tiene los dos nodos a los costados trato de compensarlo con ellos</font>

                <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>j<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font> <font color="black">&#62;</font><font color="black">=</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font> <font color="maroon">2</font><font color="black">/</font><font color="maroon">3</font> <font color="black">*</font>cantidadClaves<font color="black">)</font>
                <font color="black">{</font>
                    <font color="green">//hay una forma de compensarlo con los nodos de los constados</font>
                    MoverContenido<font color="black">(</font>j, i<font color="black">)</font>;
                    solucionado<font color="black">=</font><font color="blue">true</font>;
                <font color="black">}</font>
                <font color="blue">else</font> <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>k<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font> <font color="black">&#62;</font><font color="black">=</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font> <font color="maroon">2</font><font color="black">/</font><font color="maroon">3</font> <font color="black">*</font>cantidadClaves<font color="black">)</font>
                <font color="black">{</font>
                    <font color="green">//hay una forma de compensarlo con los nodos de los constados</font>
                    <font color="blue">if</font><font color="black">(</font>j<font color="black">&#62;</font>i <font color="black">&</font><font color="black">&</font> k<font color="black">&#60;</font>i<font color="black">)</font>
                        MoverContenido<font color="black">(</font>k, i<font color="black">)</font>;
                    <font color="blue">else</font>
                    <font color="black">{</font>
                        MoverContenido<font color="black">(</font>k, j<font color="black">)</font>;
                        MoverContenido<font color="black">(</font>j, i<font color="black">)</font>;
                    <font color="black">}</font>

                    solucionado<font color="black">=</font><font color="blue">true</font>;
                <font color="black">}</font>
            <font color="black">}</font>
            <font color="blue">else</font>
            <font color="black">{</font>
                <font color="green">//si tiene un solo nodo al costado lo trato de compensar con el</font>

                <font color="blue">if</font><font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>j<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font> <font color="black">&#62;</font><font color="black">=</font><font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font> <font color="maroon">2</font><font color="black">/</font><font color="maroon">3</font> <font color="black">*</font>cantidadClaves<font color="black">)</font>
                <font color="black">{</font>
                    <font color="green">//hay una forma de compensarlo con el nodo del costado</font>

                    MoverContenido<font color="black">(</font>j, i<font color="black">)</font>;
                    solucionado<font color="black">=</font><font color="blue">true</font>;
                <font color="black">}</font>
            <font color="black">}</font>
        <font color="black">}</font>
    <font color="black">}</font>

    <font color="blue">if</font><font color="black">(</font>solucionado<font color="black">)</font>
        <font color="blue">return</font>;

    <font color="blue">if</font><font color="black">(</font>nodos<font color="black">[</font>i<font color="black">]</font><font color="black">-</font><font color="black">&#62;</font>EsHoja<font color="black">(</font><font color="black">)</font><font color="black">)</font>
    <font color="black">{</font>
        FucionarHojas<font color="black">(</font>i,j,k<font color="black">)</font>;
    <font color="black">}</font>
    <font color="blue">else</font>
    <font color="black">{</font>
        FucionarNodos<font color="black">(</font>i,j,k<font color="black">)</font>;
    <font color="black">}</font>
<font color="black">}</font>

<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>MoverContenido<font color="black">(</font><font color="blue">int</font> desde, <font color="blue">int</font> hasta<font color="black">)</font>
<font color="black">{</font>
    Clave<font color="black">*</font> clave;
    ComponenteArbolB<font color="black">*</font> nodo;

    <font color="blue">if</font><font color="black">(</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">-</font><font color="black">&#62;</font>EsHoja<font color="black">(</font><font color="black">)</font><font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font>desde<font color="black">&#60;</font>hasta<font color="black">)</font>
        <font color="black">{</font>
            <font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.insert<font color="black">(</font><font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.begin<font color="black">(</font><font color="black">)</font>,<font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion<font color="black">[</font><font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">]</font><font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.pop_back<font color="black">(</font><font color="black">)</font>;
            ActualizarClave<font color="black">(</font>desde<font color="black">)</font>;
        <font color="black">}</font>
        <font color="blue">else</font>
        <font color="black">{</font>
            <font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.insert<font color="black">(</font><font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.begin<font color="black">(</font><font color="black">)</font>,<font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion<font color="black">[</font><font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">]</font><font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>HojaArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>informacion.pop_back<font color="black">(</font><font color="black">)</font>;
            ActualizarClave<font color="black">(</font>hasta<font color="black">)</font>;
        <font color="black">}</font>
    <font color="black">}</font>
    <font color="blue">else</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font>desde<font color="black">&#60;</font>hasta<font color="black">)</font>
        <font color="black">{</font>
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>SubirMayor<font color="black">(</font>clave, nodo<font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>BajarMenor<font color="black">(</font>clave, nodo<font color="black">)</font>;
            ActualizarClave<font color="black">(</font>desde<font color="black">)</font>;
        <font color="black">}</font>
        <font color="blue">else</font>
        <font color="black">{</font>
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>desde<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>SubirMenor<font color="black">(</font>clave, nodo<font color="black">)</font>;
            <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>hasta<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>BajarMayor<font color="black">(</font>clave, nodo<font color="black">)</font>;
            ActualizarClave<font color="black">(</font>hasta<font color="black">)</font>;
        <font color="black">}</font>
    <font color="black">}</font>
<font color="black">}</font>

<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>ActualizarClave<font color="black">(</font><font color="blue">int</font> claveNum<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>claves<font color="black">[</font>claveNum<font color="black">]</font><font color="black">)</font>
        <font color="blue">delete</font> claves<font color="black">[</font>claveNum<font color="black">]</font>;
    nodos<font color="black">[</font>claveNum<font color="black">]</font><font color="black">-</font><font color="black">&#62;</font>MayorClave<font color="black">(</font>claves<font color="black">[</font>claveNum<font color="black">]</font><font color="black">)</font>;
<font color="black">}</font>


<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>MayorClave<font color="black">(</font>Clave<font color="black">*</font> <font color="black">&</font>dato<font color="black">)</font>
<font color="black">{</font>
    nodos<font color="black">[</font>nodos.size<font color="black">(</font><font color="black">)</font><font color="maroon">-1</font><font color="black">]</font><font color="black">-</font><font color="black">&#62;</font>MayorClave<font color="black">(</font>dato<font color="black">)</font>;
<font color="black">}</font>

<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>DividirNodos<font color="black">(</font><font color="blue">int</font> nodo1, <font color="blue">int</font> nodo2<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">int</font> aux, nodo3;

        <font color="blue">if</font><font color="black">(</font>nodo1<font color="black">&#62;</font>nodo2<font color="black">)</font>
        <font color="black">{</font>
            aux<font color="black">=</font>nodo1;
            nodo1<font color="black">=</font>nodo2;
            nodo2<font color="black">=</font>aux;
        <font color="black">}</font>

        nodo3<font color="black">=</font>nodo2<font color="black">+</font><font color="maroon">1</font>;

        claves.insert<font color="black">(</font>claves.begin<font color="black">(</font><font color="black">)</font><font color="black">+</font>nodo2,NULL<font color="black">)</font>;
        nodos.insert<font color="black">(</font>nodos.begin<font color="black">(</font><font color="black">)</font><font color="black">+</font>nodo2,<font color="blue">new</font> NodoArbolB<font color="black">(</font>cantidadClaves<font color="black">)</font><font color="black">)</font>;

        <font color="green">//nodo1= primero, nodo2= nuevo, nodo3= antiguo nodo2</font>

        <font color="green">//le cargo manualmente el primer nodo</font>
        <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo2<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.push_back<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo3<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">)</font>;
        <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo3<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.erase<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo3<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>nodos.begin<font color="black">(</font><font color="black">)</font><font color="black">)</font>;

        <font color="green">//cargo manualmente la clave</font>
        claves<font color="black">[</font>nodo2<font color="black">]</font><font color="black">=</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo3<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves<font color="black">[</font><font color="maroon">0</font><font color="black">]</font>;
        <font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo3<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.erase<font color="black">(</font><font color="black">(</font><font color="black">(</font>NodoArbolB<font color="black">*</font><font color="black">)</font>nodos<font color="black">[</font>nodo3<font color="black">]</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>claves.begin<font color="black">(</font><font color="black">)</font><font color="black">)</font>;

        <font color="green">//muevo 1/3 del primer nodo</font>
        MoverContenidoNodo<font color="black">(</font>nodo1,nodo2,cantidadClaves<font color="black">*</font><font color="maroon">1</font><font color="black">/</font><font color="maroon">3</font><font color="black">)</font>;

        <font color="green">//muevo el otro 1/3 desde el segundo recordando que ya pase uno manualmente</font>
        MoverContenidoNodo<font color="black">(</font>nodo3,nodo2,<font color="black">(</font>cantidadClaves<font color="black">*</font><font color="maroon">1</font><font color="black">/</font><font color="maroon">3</font><font color="black">)</font><font color="maroon">-1</font><font color="black">)</font>;
<font color="black">}</font>



NodoArbolB<font color="black">:</font><font color="black">:</font>NodoArbolB<font color="black">(</font><font color="blue">int</font> cantidadClaves<font color="black">)</font><font color="black">:</font> ComponenteArbolB<font color="black">(</font>cantidadClaves<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">for</font><font color="black">(</font>vector<font color="black">&#60;</font>ComponenteArbolB<font color="black">*</font><font color="black">&#62;</font><font color="black">:</font><font color="black">:</font>iterator it<font color="black">=</font>nodos.begin<font color="black">(</font><font color="black">)</font>; it <font color="black">!</font><font color="black">=</font> nodos.end<font color="black">(</font><font color="black">)</font>; <font color="black">+</font><font color="black">+</font>it<font color="black">)</font>
    <font color="black">{</font>
        <font color="black">*</font>it<font color="black">=</font>NULL;
    <font color="black">}</font>


    <font color="blue">for</font><font color="black">(</font>vector<font color="black">&#60;</font>Clave<font color="black">*</font><font color="black">&#62;</font><font color="black">:</font><font color="black">:</font>iterator it<font color="black">=</font>claves.begin<font color="black">(</font><font color="black">)</font>; it <font color="black">!</font><font color="black">=</font> claves.end<font color="black">(</font><font color="black">)</font>; <font color="black">+</font><font color="black">+</font>it<font color="black">)</font>
    <font color="black">{</font>
        <font color="black">*</font>it<font color="black">=</font>NULL;
    <font color="black">}</font>
<font color="black">}</font>



<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>SubirMenor<font color="black">(</font>Clave <font color="black">*</font><font color="black">&</font> dato, ComponenteArbolB <font color="black">*</font><font color="black">&</font> puntero<font color="black">)</font>
<font color="black">{</font>
    <font color="blue">if</font><font color="black">(</font>claves.size<font color="black">(</font><font color="black">)</font><font color="black">=</font><font color="black">=</font><font color="maroon">0</font><font color="black">)</font>
    <font color="black">{</font>
        dato<font color="black">=</font>NULL;
        puntero<font color="black">=</font>NULL;
        <font color="blue">return</font>;
    <font color="black">}</font>
    dato<font color="black">=</font>claves<font color="black">[</font><font color="maroon">0</font><font color="black">]</font>;
    puntero<font color="black">=</font>nodos<font color="black">[</font><font color="maroon">0</font><font color="black">]</font>;

    nodos.erase<font color="black">(</font>nodos.begin<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
    claves.erase<font color="black">(</font>claves.begin<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
<font color="black">}</font>


vector<font color="black">&#60;</font>Informacion<font color="black">*</font><font color="black">&#62;</font> NodoArbolB<font color="black">:</font><font color="black">:</font>Buscar<font color="black">(</font>Clave<font color="black">*</font> dato<font color="black">)</font>
<font color="black">{</font>

    <font color="blue">int</font> i;
    <font color="blue">for</font><font color="black">(</font> i<font color="black">=</font><font color="maroon">0</font>; <font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font>i <font color="black">&#60;</font> claves.size<font color="black">(</font><font color="black">)</font>;  i<font color="black">+</font><font color="black">+</font><font color="black">)</font>
    <font color="black">{</font>
        <font color="blue">if</font><font color="black">(</font>dato<font color="black">-</font><font color="black">&#62;</font>Comparar<font color="black">(</font>claves<font color="black">[</font>i<font color="black">]</font><font color="black">)</font><font color="black">&#60;</font><font color="maroon">0</font><font color="black">)</font>
        <font color="black">{</font>
            <font color="green">//salgo cuando encuentro la primer clave menos</font>
            <font color="blue">break</font>;
        <font color="black">}</font>
    <font color="black">}</font>

    <font color="blue">return</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>nodos<font color="black">[</font>i<font color="black">]</font><font color="black">-</font><font color="black">&#62;</font>Buscar<font color="black">(</font>dato<font color="black">)</font>;

<font color="black">}</font>

<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>DividirHojas<font color="black">(</font><font color="blue">int</font> hoja1,<font color="blue">int</font> hoja2<font color="black">)</font>
<font color="black">{</font>
    <font color="green">//TODO:</font>
<font color="black">}</font>

<font color="blue">void</font> NodoArbolB<font color="black">:</font><font color="black">:</font>FucionarHojas<font color="black">(</font><font color="blue">int</font> hoja1,<font color="blue">int</font> hoja2, <font color="blue">int</font> hoja3<font color="black">)</font>
<font color="black">{</font>
    <font color="green">//TODO:</font>
<font color="black">}</font>



</PRE>
</BODY>
</HTML>
